# 一、Netty基础理论
# 什么是Netty
Netty是 一个异步事件驱动的网络应用程序框架,用于开发的高性能协议服务器和客户端。Netty本质是上对Java NIO的封装,采用Reactor线程模型(Selector(多路复用)器、Acceptor、Handler)、零拷贝技术,极大的提升了socket通信性能。
# Netty的特点
高并发、传输快和封装好
- 高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。
- 传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输。
- 封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口。
# Netty的应用场景
Netty主要作为基础通信框架提供高性能、低延时的通信服务。可用于构建高性能、低延时的各种Java中间件,例如阿里分布式服务框架 Dubbo、 RocketMQ 默认使用 Netty 作为通讯框架。
在个人开发的项目中,主要用来作为基础设备通信框架,例如采用NIO做情报板、水电表数据及基础设备信息的采集。
- 情报板通信:停车位自动发布,其发布过程分为四个阶段,1.删除旧文件 2.创建文件 3.下发文件 4. 播放文
- 设备状态采集:通过SNMP协议,NIO获取并异步更新设备状态
# 二、Netty架构
# Netty的处理流程
- (以服务端为例子)
- 创建ServerBootstrap启动器
- 绑定Reactor线程池
- 绑定NIO SocketChannel
- 绑定ChannelHandler
- 绑定端口并通过Selector轮询监听
- 客户端通过IP + 端口连接服务端
- 服务端监听到连接,创建channel注册到服务端的EventLoopGroup(类似于线程池)
- EventLoopGroup分发channel到具体的EventLoop,每个EventLoop管理并监听多个channel
- EventLoop监听到客户端channel的IO事件,调用ChannelPipeline中的入站handler进行处理
- handler进行解析、执行业务,通过channel将结果发送到出站handler,由其进行包的封装

- 服务端


- 客户端
